<?xml version="1.0" encoding="UTF-8"?>

<!-- 
 * Copyright 2008 Philippe Prados.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
-->

<?xml-stylesheet type="text/xsl" href="../../../../xslt/xslt-to-xhtml.xslt" ?>
<xsl:stylesheet 
	version="2.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation=
		"http://www.w3.org/1999/XSL/Transform http://www.w3.org/2007/schema-for-xslt20.xsd
		 http://jndi-resources.googlecode.com/1.0/ http://www.prados.fr/xsd/1.0/jndi-resources.xsd
		"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:sch="http://www.w3.org/2001/XMLSchema"
	xmlns:jndi="http://jndi-resources.googlecode.com/1.0/"
	xmlns:tools="http://jndi-resources.googlecode.com/1.0/java/com.googlecode.jndiresources.tools.XSLTools"
	exclude-result-prefixes="#all"
>
<xsl:param name="war"/>
	<xsl:include href="../../install-drivers.xslt"/>
	
	<xsl:variable name="server">
		<xsl:value-of select="concat($targetdir,'catalina.base/conf/server.xml')" />
	</xsl:variable>

	<xsl:template match="text()|comment()" />

	<xsl:template match="jndi:resources[@id=$currentid]">
	<xsl:if test="not(ends-with($war,'.ear'))">


	<xsl:value-of select="tools:fileCopy('../../../tools/xslt/save.xslt',concat($targetdir,'../xslt/'))"/>
	<xsl:value-of select="tools:fileCopy('../../update-tomcat-server.xslt',concat($targetdir,'../xslt/'))"/>


		<xsl:value-of select="tools:info(concat('Generate ',$filename))" />
		<xsl:result-document href="{$filename}">
			<xsl:comment>Generated by jndi-resources v<xsl:value-of select="$version" /></xsl:comment>
			<xsl:text>&#xA;</xsl:text>
			<xsl:processing-instruction name="jndi-stylesheet">href="xslt/update-tomcat-server.xslt"</xsl:processing-instruction>
			<xsl:text>&#xA;</xsl:text>
			<xsl:processing-instruction name="jndi-stylesheet">href="xslt/save.xslt" target="conf/server.xml"</xsl:processing-instruction>
			<xsl:text>&#xA;</xsl:text>
			<Server>
			<GlobalNamingResources>
				<xsl:apply-templates />
				<xsl:call-template name="footer"/>
			</GlobalNamingResources>
			</Server>
		</xsl:result-document>
	</xsl:if>
	</xsl:template>

	<xsl:template
		match="jndi:resources[@id=$currentid]/jndi:resource[@familly=$familly]">

		<xsl:if
			test="jndi:property[(@name='xa' and @value!='true')] or count(jndi:property[@name='xa'])=0">
			<xsl:text>&#xA;   </xsl:text>
			<xsl:comment>Register Datasource for key <xsl:value-of select="@name" /></xsl:comment>
			<xsl:text>&#xA;   </xsl:text>
<!-- http://commons.apache.org/dbcp/configuration.html -->
  			<Resource
               auth="Container"
               type="{$jdbc.type}">
            	<xsl:attribute name="name">
            	<xsl:choose>
            		<xsl:when test="starts-with(@name,'java:')">
            			<xsl:value-of select="substring-after(@name,'java:')"/>
            		</xsl:when>
            		<xsl:otherwise>
            			<xsl:value-of select="@name"/>
            		</xsl:otherwise>
            	</xsl:choose>
            	</xsl:attribute>
            </Resource>   
 			<ResourceParams>
            	<xsl:attribute name="name">
            	<xsl:choose>
            		<xsl:when test="starts-with(@name,'java:')">
            			<xsl:value-of select="substring-after(@name,'java:')"/>
            		</xsl:when>
            		<xsl:otherwise>
            			<xsl:value-of select="@name"/>
            		</xsl:otherwise>
            	</xsl:choose>
            	</xsl:attribute>
            	
				<parameter>
					<name>factory</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test="jndi:property[@name='xa'][@value='yes']">
								<xsl:if test="$jdbc.xa.factory = ''">
									<xsl:value-of select="tools:error(concat('The database ',@familly,'	is not compatible with XA for ',$appsrv,'!'))" />
								</xsl:if>
		            			<xsl:value-of select="$jdbc.xa.factory" />
		            		</xsl:when>
		            		<xsl:otherwise>
		            			<xsl:value-of select="$jdbc.factory" />
		            		</xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>
				
				<parameter>
					<name><xsl:value-of select="$username"/></name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='username']">
		            			<xsl:value-of select=".//jndi:property[@name='username']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise><xsl:value-of select="$jdbc.username"/></xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>
				
				<parameter>
					<name>password</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='password']">
		            			<xsl:value-of select=".//jndi:property[@name='password']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise><xsl:value-of select="$jdbc.password"/></xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>driverClassName</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test="jndi:property[@name='xa'][@value='yes']"><xsl:value-of select="$jdbc.xa.driver" /></xsl:when>
		            		<xsl:otherwise><xsl:value-of select="$jdbc.driver" /></xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>url</name>
					<value>
						<xsl:choose>
							<xsl:when
								test=".//jndi:property[@name='username']">
								<xsl:value-of
									select=".//jndi:property[@name='connection-url']/@value" />
							</xsl:when>
							<xsl:otherwise>
				            	<xsl:choose>
				            		<xsl:when test="jndi:property[@name='xa'][@value='yes']"><xsl:value-of select="$jdbc.xa.url.default" /></xsl:when>
				            		<xsl:otherwise><xsl:value-of select="$jdbc.url.default" /></xsl:otherwise>
				            	</xsl:choose>
							</xsl:otherwise>
						</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>maxIdle</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='min-pool-size']">
		            			<xsl:value-of select=".//jndi:property[@name='min-pool-size']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise>${jdbc.min-pool-size}</xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>
				
				<parameter>
					<name>maxActive</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='max-pool-size']">
		            			<xsl:value-of select=".//jndi:property[@name='max-pool-size']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise>${jdbc.max-pool-size}</xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>maxOpenPreparedStatements</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='prepared-statement-cache-size']">
		            			<xsl:value-of select=".//jndi:property[@name='prepared-statement-cache-size']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise>${jdbc.prepared-statement-cache-size}</xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>maxWait</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='max-wait']">
		            			<xsl:value-of select=".//jndi:property[@name='max-wait']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise>${jdbc.max-wait}</xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>

				<parameter>
					<name>validation-query</name>
					<value>
		            	<xsl:choose>
		            		<xsl:when test=".//jndi:property[@name='validation-query']">
		            			<xsl:value-of select=".//jndi:property[@name='validation-query']/@value"/>
		            		</xsl:when>
		            		<xsl:otherwise><xsl:value-of select="$jdbc.validation-query"/></xsl:otherwise>
		            	</xsl:choose>
					</value>
				</parameter>


<!--  TODO : verifier -->
				<xsl:for-each select="jndi:extends[@appsrv=$appsrv]/jndi:attribute">
					<xsl:attribute name="{@name}">
						<xsl:value-of select="."/>
					</xsl:attribute>
				</xsl:for-each>
            </ResourceParams>
			<xsl:copy-of select="$jdbc.addon" />
		</xsl:if>

		<xsl:if test="jndi:property[@name='xa'][@value='true']">
			<xsl:if test="$jdbc.xa.driver = ''">
				<xsl:variable name="errmsg">The database <xsl:value-of select="@familly" />	is not compatible with XA</xsl:variable>
				<xsl:value-of
					select="error(sch:QName('error9999'),$errmsg,.)" />
			</xsl:if>
		</xsl:if>

	</xsl:template>

</xsl:stylesheet>
